package com.train.course.mapper;

import com.train.course.domain.VideoViewHistory;
import java.util.List;

/**
 * 视频观看记录Mapper接口
 * 
 * @author ruoyi
 */
public interface VideoViewHistoryMapper 
{
    /**
     * 查询视频观看记录
     * 
     * @param historyId 视频观看记录主键
     * @return 视频观看记录
     */
    public VideoViewHistory selectVideoViewHistoryById(Long historyId);

    /**
     * 查询视频观看记录列表
     * 
     * @param videoViewHistory 视频观看记录
     * @return 视频观看记录集合
     */
    public List<VideoViewHistory> selectVideoViewHistoryList(VideoViewHistory videoViewHistory);

    /**
     * 根据用户ID和视频集ID查询观看记录
     * 
     * @param userId 用户ID
     * @param episodeId 视频集ID
     * @return 视频观看记录
     */
    public VideoViewHistory selectVideoViewHistoryByUserAndEpisode(Long userId, Long episodeId);

    /**
     * 根据用户ID查询观看记录列表
     * 
     * @param userId 用户ID
     * @return 视频观看记录集合
     */
    public List<VideoViewHistory> selectVideoViewHistoryListByUserId(Long userId);

    /**
     * 新增视频观看记录
     * 
     * @param videoViewHistory 视频观看记录
     * @return 结果
     */
    public int insertVideoViewHistory(VideoViewHistory videoViewHistory);

    /**
     * 修改视频观看记录
     * 
     * @param videoViewHistory 视频观看记录
     * @return 结果
     */
    public int updateVideoViewHistory(VideoViewHistory videoViewHistory);

    /**
     * 删除视频观看记录
     * 
     * @param historyId 视频观看记录主键
     * @return 结果
     */
    public int deleteVideoViewHistoryById(Long historyId);

    /**
     * 批量删除视频观看记录
     * 
     * @param historyIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteVideoViewHistoryByIds(Long[] historyIds);

    /**
     * 插入或更新观看记录（INSERT ON DUPLICATE KEY UPDATE）
     * 
     * @param videoViewHistory 观看记录
     * @return 结果
     */
    public int insertOrUpdateHistory(VideoViewHistory videoViewHistory);

    /**
     * 关联视频集表查询观看历史列表（下滑刷新）
     * 
     * @param userId 用户ID
     * @param lastHistoryId 上一次最后一条历史记录ID
     * @param pageSize 页面大小
     * @return 历史记录列表
     */
    public List<com.train.course.vo.HistoryVO> selectHistoryListWithEpisode(Long userId, Long lastHistoryId, Integer pageSize);
}